﻿using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Messaging;
using GalaSoft.MvvmLight.Command;
using System.Diagnostics;
using System.Windows.Controls;
using System.Collections.ObjectModel;
using SGT.Model;
using SGT.Views;


namespace SGT.ViewModel
{
    /// <summary>
    /// This class contains properties that the main View can data bind to.
    /// <para>
    /// Use the <strong>mvvminpc</strong> snippet to add bindable properties to this ViewModel.
    /// </para>
    /// <para>
    /// You can also use Blend to data bind with the tool's support.
    /// </para>
    /// <para>
    /// See http://www.galasoft.ch/mvvm/getstarted
    /// </para>
    /// </summary>
    public class PortadaViewModel : ViewModelBase
    {
        private ObservableCollection<Grafica> _Charts;
        //private ObservableCollection<Deposito> _ColeccionDepositos;
        private Grafica _GraficaSelecionada;
        private Deposito _DepositoActual;
        private bool _TabRemitosVisible;
        public RelayCommand NuevaSalidaCommand { get; private set; }
        public RelayCommand AgregarMercaderia { get; private set; }
        public RelayCommand AgregarProveedor { get; private set; }
        public RelayCommand NuevoDeposito { get; private set; }
        public RelayCommand EstablecerDepositoActual { get; private set; }

        Messenger mes = Messenger.Default;


        public ObservableCollection<Grafica> Charts
        {
            get { return _Charts; }
            set
            {
                _Charts = value;
                RaisePropertyChanged("Charts");
            }
        }

        public bool TabRemitosVisible
        {
            get { return _TabRemitosVisible; }
            set
            {
                _TabRemitosVisible = value;
                RaisePropertyChanged("TabRemitosVisible");
                seleccionarSector();
            }
        }


        public Grafica GraficaSelcionada
        {
            get { return _GraficaSelecionada; }
            set
            {
                _GraficaSelecionada = value;
                RaisePropertyChanged("GraficaSelcionada");
                seleccionarSector();
            }
        }

        public Deposito DepositoActual
        {
            get { return _DepositoActual; }
            set
            {
                _DepositoActual = value;
                RaisePropertyChanged("DepositoActual");
                
            }
        }
        /// <summary>
        /// Initializes a new instance of the MainViewModel class.
        /// </summary>
        public PortadaViewModel()
        {
            if (IsInDesignMode)
            {
                // Code runs in Blend --> create design time data.
            }
            else
            {
                DepositoActual = ManejadorDepositos.GetDepositoActual();
                _Charts = ManejadorDepositos.GetGraficas();
                NuevaSalidaCommand = new RelayCommand(NuevaSalida);
                AgregarMercaderia = new RelayCommand(IngresarMercaderia);
                AgregarProveedor = new RelayCommand(IngresarProveedor);
                NuevoDeposito = new RelayCommand(nuevoDeposito);
                EstablecerDepositoActual = new RelayCommand(mostrarEstablecerDepositoActual);
                //Messenger.Default.Register<Deposito>(this, elDeposito => DepositoActual = elDeposito);
                Messenger.Default.Register<Deposito>(this, elDeposito => cambiarDepositoActual(elDeposito));
                Messenger.Default.Register<Mensaje>(this, msg => procesarMensaje(msg.texto));
                
              
            
            }
        }
        private void NuevaSalida()
        {

        
            mes.Send(new GalaSoft.MvvmLight.Messaging.DialogMessage("Hey", res =>
            {
                Debug.WriteLine(res.ToString());
            }), "mb1");
        }

        private void IngresarMercaderia()
        {
            var nuevaMercaderia = new NuevaMercaderiaView();
            nuevaMercaderia.ShowDialog();
        }

        private void IngresarProveedor()
        {
            var nuevoProveedor = new NuevoProveedorView();
            nuevoProveedor.ShowDialog();
        }

        private void nuevoDeposito()
        {
            var nuevoDeposito = new NuevoDepositoView();
            nuevoDeposito.ShowDialog();
        }

        private void mostrarEstablecerDepositoActual()
        {
            var establecerDepositoVentana = new ABMDepositosView();
            establecerDepositoVentana.ShowDialog();
        }

        private void armarGraficas()
        {
            if (_Charts == null)
                _Charts = new ObservableCollection<Grafica>();
            else
                Charts.Clear();
            DepositoActual = ManejadorDepositos.GetDepositoActual();
            foreach (Sector s in DepositoActual.ColeccionSectores)
            {
                Grafica g = new Grafica();
                g.Titulo = s.Nombre;
                g.ListaSectores = new ObservableCollection<Sector>();
                g.ListaSectores.Add(s);
                Charts.Add(g);
            }
            
        }

        private void cambiarDepositoActual(Deposito d)
        {
            DepositoActual = d;
            armarGraficas();
        }

        private void seleccionarSector()
        {
            Sector s = GraficaSelcionada.ListaSectores[0];
            Messenger.Default.Send<Sector, RemitoViewModel>(s);

        }

        private void procesarMensaje(string msg)
        {
            if (msg.CompareTo("RecargarGraficas") == 0)
                armarGraficas();
        }

        ////public override void Cleanup()
        ////{
        ////    // Clean up if needed

        ////    base.Cleanup();
        ////}
    }
}